package disk;

/**
 * 目录项类(文件或目录)
 * 
 * @author vincent
 * 
 */
public abstract class DirectoryEntry {
	/**
	 * 名字(3个字节)
	 */
	protected byte[] name = new byte[3];
	/**
	 * 类型名(2个字节)
	 */
	protected byte[] typeName = new byte[2];
	/**
	 * 属性
	 */
	protected byte attribute;
	/**
	 * 起始盘块号
	 */
	protected byte blockIndex;
	/**
	 * 长度
	 */
	protected byte length;

	/**
	 * 构造函数
	 * 
	 * @param name
	 * @param typeName
	 * @param attribute
	 * @param blockIndex
	 * @param length
	 */
	public DirectoryEntry(byte[] name, byte[] typeName, byte attribute,
			byte blockIndex, byte length) {
		// TODO 自动生成的构造函数存根
		this.name = name;
		this.typeName = typeName;
		this.attribute = attribute;
		this.blockIndex = blockIndex;
		this.length = length;
	}

	/**
	 * 获取完整的目录项的名字(目录则为目录名、文件则为文件名加上后缀名)
	 * 
	 * @return
	 */
	abstract public String getCompleteName();

	public void setAttribute(byte attribute) {
		this.attribute = attribute;
	}

	public void setBlockIndex(byte blockIndex) {
		this.blockIndex = blockIndex;
	}

	public void setLength(byte length) {
		this.length = length;
	}

	public void setName(byte[] name) {
		this.name = name;
	}

	public void setTypeName(byte[] typeName) {
		this.typeName = typeName;
	}

	public byte getAttribute() {
		return attribute;
	}

	public byte getBlockIndex() {
		return blockIndex;
	}

	public byte getLength() {
		return length;
	}

	public byte[] getName() {
		return name;
	}

	public byte[] getTypeName() {
		return typeName;
	}

	/**
	 * 添加文件属性
	 * 
	 * @param attribute
	 */
	public void addAttribute(byte attribute) {
		// 做或操作
		this.attribute |= attribute;
	}

	/**
	 * 移除文件属性
	 * 
	 * @param attribute
	 */
	public void removeAttribute(byte attribute) {
		// 做异或操作
		this.attribute ^= attribute;
	}

	/**
	 * 判断文件是否为目录
	 * 
	 * @param attribute
	 * @return
	 */
	public boolean isFolder() {
		// 判断第4位是否为1
		if ((attribute & FileAttribute.ISFOLDER) == 8) {
			return true;
		}
		return false;
	}

	/**
	 * 判断文件是否为普通文件
	 * 
	 * @param attribute
	 * @return
	 */
	public boolean isCommonFile() {
		if ((attribute & FileAttribute.ISCOMMONFILE) == 4) {
			return true;
		}
		return false;
	}

	/**
	 * 判断文件是否为系统文件
	 * 
	 * @param attribute
	 * @return
	 */
	public boolean isSystmFile() {
		if ((attribute & FileAttribute.ISSYSTEMFILE) == 2) {
			return true;
		}
		return false;
	}

	/**
	 * 判断文件是否为只读
	 * 
	 * @param attribute
	 * @return
	 */
	public boolean isReadOnly() {
		if ((attribute & FileAttribute.ISREADONLY) == 1) {
			return true;
		}
		return false;
	}

}
